﻿/**
 * jQuery EasyUI 1.3
 *
 * Licensed under the GPL terms
 * To use it on other terms please contact us
 *
 * Copyright(c) 2009-2012 stworthy [ stworthy@gmail.com ]
 *
 */
(function ($) {
    function _1(_2) {
        $(_2).appendTo("body");
        $(_2).addClass("menu-top");
        var _3 = [];
        _4($(_2));
        var _5 = null;
        for (var i = 0; i < _3.length; i++) {
            var _6 = _3[i];
            _7(_6);
            _6.children("div.menu-item").each(function () {
                _10(_2, $(this));
            });
            _6.bind("mouseenter", function () {
                if (_5) {
                    clearTimeout(_5);
                    _5 = null;
                }
            }).bind("mouseleave", function () {
                _5 = setTimeout(function () {
                    _19(_2);
                }, 100);
            });
        }

        function _4(_8) {
            _3.push(_8);
            _8.find(">div").each(function () {
                var _9 = $(this);
                var _a = _9.find(">div");
                if (_a.length) {
                    _a.insertAfter(_2);
                    _9[0].submenu = _a;
                    _4(_a);
                }
            });
        };

        function _7(_b) {
            _b.addClass("menu").find(">div").each(function () {
                var _c = $(this);
                if (_c.hasClass("menu-sep")) {
                    _c.html("&nbsp;");
                } else {
                    var _d = $.extend({}, $.parser.parseOptions(this, ["name", "iconCls", "href"]), {disabled: (_c.attr("disabled") ? true : undefined)});
                    _c.attr("name", _d.name || "").attr("href", _d.href || "");
                    var _e = _c.addClass("menu-item").html();
                    _c.empty().append($("<div class=\"menu-text\"></div>").html(_e));
                    if (_d.iconCls) {
                        $("<div class=\"menu-icon\"></div>").addClass(_d.iconCls).appendTo(_c);
                    }
                    if (_d.disabled) {
                        _f(_2, _c[0], true);
                    }
                    if (_c[0].submenu) {
                        $("<div class=\"menu-rightarrow\"></div>").appendTo(_c);
                    }
                    _c._outerHeight(22);
                }
            });
            _b.hide();
        };
    };

    function _10(_11, _12) {
        _12.unbind(".menu");
        _12.bind("mousedown.menu", function () {
            return false;
        }).bind("click.menu", function () {
            if ($(this).hasClass("menu-item-disabled")) {
                return;
            }
            if (!this.submenu) {
                _19(_11);
                var _13 = $(this).attr("href");
                if (_13) {
                    location.href = _13;
                }
            }
            var _14 = $(_11).menu("getItem", this);
            $.data(_11, "menu").options.onClick.call(_11, _14);
        }).bind("mouseenter.menu", function (e) {
            _12.siblings().each(function () {
                if (this.submenu) {
                    _18(this.submenu);
                }
                $(this).removeClass("menu-active");
            });
            _12.addClass("menu-active");
            if ($(this).hasClass("menu-item-disabled")) {
                _12.addClass("menu-active-disabled");
                return;
            }
            var _15 = _12[0].submenu;
            if (_15) {
                var _16 = _12.offset().left + _12.outerWidth() - 2;
                if (_16 + _15.outerWidth() + 5 > $(window).width() + $(document).scrollLeft()) {
                    _16 = _12.offset().left - _15.outerWidth() + 2;
                }
                var top = _12.offset().top - 3;
                if (top + _15.outerHeight() > $(window).height() + $(document).scrollTop()) {
                    top = $(window).height() + $(document).scrollTop() - _15.outerHeight() - 5;
                }
                _1f(_15, {left: _16, top: top});
            }
        }).bind("mouseleave.menu", function (e) {
            _12.removeClass("menu-active menu-active-disabled");
            var _17 = _12[0].submenu;
            if (_17) {
                if (e.pageX >= parseInt(_17.css("left"))) {
                    _12.addClass("menu-active");
                } else {
                    _18(_17);
                }
            } else {
                _12.removeClass("menu-active");
            }
        });
    };

    function _19(_1a) {
        var _1b = $.data(_1a, "menu").options;
        _18($(_1a));
        $(document).unbind(".menu");
        _1b.onHide.call(_1a);
        return false;
    };

    function _1c(_1d, pos) {
        var _1e = $.data(_1d, "menu").options;
        if (pos) {
            _1e.left = pos.left;
            _1e.top = pos.top;
            if (_1e.left + $(_1d).outerWidth() > $(window).width() + $(document).scrollLeft()) {
                _1e.left = $(window).width() + $(document).scrollLeft() - $(_1d).outerWidth() - 5;
            }
            if (_1e.top + $(_1d).outerHeight() > $(window).height() + $(document).scrollTop()) {
                _1e.top -= $(_1d).outerHeight();
            }
        }
        _1f($(_1d), {left: _1e.left, top: _1e.top}, function () {
            $(document).unbind(".menu").bind("mousedown.menu", function () {
                _19(_1d);
                $(document).unbind(".menu");
                return false;
            });
            _1e.onShow.call(_1d);
        });
    };

    function _1f(_20, pos, _21) {
        if (!_20) {
            return;
        }
        if (pos) {
            _20.css(pos);
        }
        _20.show(0, function () {
            if (!_20[0].shadow) {
                _20[0].shadow = $("<div class=\"menu-shadow\"></div>").insertAfter(_20);
            }
            _20[0].shadow.css({
                display: "block",
                zIndex: $.fn.menu.defaults.zIndex++,
                left: _20.css("left"),
                top: _20.css("top"),
                width: _20.outerWidth(),
                height: _20.outerHeight()
            });
            _20.css("z-index", $.fn.menu.defaults.zIndex++);
            if (_21) {
                _21();
            }
        });
    };

    function _18(_22) {
        if (!_22) {
            return;
        }
        _23(_22);
        _22.find("div.menu-item").each(function () {
            if (this.submenu) {
                _18(this.submenu);
            }
            $(this).removeClass("menu-active");
        });

        function _23(m) {
            m.stop(true, true);
            if (m[0].shadow) {
                m[0].shadow.hide();
            }
            m.hide();
        };
    };

    function _24(_25, _26) {
        var _27 = null;
        var tmp = $("<div></div>");

        function _28(_29) {
            _29.children("div.menu-item").each(function () {
                var _2a = $(_25).menu("getItem", this);
                var s = tmp.empty().html(_2a.text).text();
                if (_26 == $.trim(s)) {
                    _27 = _2a;
                } else {
                    if (this.submenu && !_27) {
                        _28(this.submenu);
                    }
                }
            });
        };
        _28($(_25));
        tmp.remove();
        return _27;
    };

    function _f(_2b, _2c, _2d) {
        var t = $(_2c);
        if (_2d) {
            t.addClass("menu-item-disabled");
            if (_2c.onclick) {
                _2c.onclick1 = _2c.onclick;
                _2c.onclick = null;
            }
        } else {
            t.removeClass("menu-item-disabled");
            if (_2c.onclick1) {
                _2c.onclick = _2c.onclick1;
                _2c.onclick1 = null;
            }
        }
    };

    function _2e(_2f, _30) {
        var _31 = $(_2f);
        if (_30.parent) {
            _31 = _30.parent.submenu;
        }
        var _32 = $("<div class=\"menu-item\"></div>").appendTo(_31);
        $("<div class=\"menu-text\"></div>").html(_30.text).appendTo(_32);
        if (_30.iconCls) {
            $("<div class=\"menu-icon\"></div>").addClass(_30.iconCls).appendTo(_32);
        }
        if (_30.id) {
            _32.attr("id", _30.id);
        }
        if (_30.href) {
            _32.attr("href", _30.href);
        }
        if (_30.name) {
            _32.attr("name", _30.name);
        }
        if (_30.onclick) {
            if (typeof _30.onclick == "string") {
                _32.attr("onclick", _30.onclick);
            } else {
                _32[0].onclick = eval(_30.onclick);
            }
        }
        if (_30.handler) {
            _32[0].onclick = eval(_30.handler);
        }
        _10(_2f, _32);
        if (_30.disabled) {
            _f(_2f, _32[0], true);
        }
    };

    function _33(_34, _35) {
        function _36(el) {
            if (el.submenu) {
                el.submenu.children("div.menu-item").each(function () {
                    _36(this);
                });
                var _37 = el.submenu[0].shadow;
                if (_37) {
                    _37.remove();
                }
                el.submenu.remove();
            }
            $(el).remove();
        };
        _36(_35);
    };

    function _38(_39) {
        $(_39).children("div.menu-item").each(function () {
            _33(_39, this);
        });
        if (_39.shadow) {
            _39.shadow.remove();
        }
        $(_39).remove();
    };
    $.fn.menu = function (_3a, _3b) {
        if (typeof _3a == "string") {
            return $.fn.menu.methods[_3a](this, _3b);
        }
        _3a = _3a || {};
        return this.each(function () {
            var _3c = $.data(this, "menu");
            if (_3c) {
                $.extend(_3c.options, _3a);
            } else {
                _3c = $.data(this, "menu", {options: $.extend({}, $.fn.menu.defaults, $.fn.menu.parseOptions(this), _3a)});
                _1(this);
            }
            $(this).css({left: _3c.options.left, top: _3c.options.top});
        });
    };
    $.fn.menu.methods = {
        show: function (jq, pos) {
            return jq.each(function () {
                _1c(this, pos);
            });
        }, hide: function (jq) {
            return jq.each(function () {
                _19(this);
            });
        }, destroy: function (jq) {
            return jq.each(function () {
                _38(this);
            });
        }, setText: function (jq, _3d) {
            return jq.each(function () {
                $(_3d.target).children("div.menu-text").html(_3d.text);
            });
        }, setIcon: function (jq, _3e) {
            return jq.each(function () {
                var _3f = $(this).menu("getItem", _3e.target);
                if (_3f.iconCls) {
                    $(_3f.target).children("div.menu-icon").removeClass(_3f.iconCls).addClass(_3e.iconCls);
                } else {
                    $("<div class=\"menu-icon\"></div>").addClass(_3e.iconCls).appendTo(_3e.target);
                }
            });
        }, getItem: function (jq, _40) {
            var t = $(_40);
            var _41 = {
                target: _40,
                id: t.attr("id"),
                text: $.trim(t.children("div.menu-text").html()),
                disabled: t.hasClass("menu-item-disabled"),
                href: t.attr("href"),
                name: t.attr("name"),
                onclick: _40.onclick
            };
            var _42 = t.children("div.menu-icon");
            if (_42.length) {
                var cc = [];
                var aa = _42.attr("class").split(" ");
                for (var i = 0; i < aa.length; i++) {
                    if (aa[i] != "menu-icon") {
                        cc.push(aa[i]);
                    }
                }
                _41.iconCls = cc.join(" ");
            }
            return _41;
        }, findItem: function (jq, _43) {
            return _24(jq[0], _43);
        }, appendItem: function (jq, _44) {
            return jq.each(function () {
                _2e(this, _44);
            });
        }, removeItem: function (jq, _45) {
            return jq.each(function () {
                _33(this, _45);
            });
        }, enableItem: function (jq, _46) {
            return jq.each(function () {
                _f(this, _46, false);
            });
        }, disableItem: function (jq, _47) {
            return jq.each(function () {
                _f(this, _47, true);
            });
        }
    };
    $.fn.menu.parseOptions = function (_48) {
        return $.extend({}, $.parser.parseOptions(_48, ["left", "top"]));
    };
    $.fn.menu.defaults = {
        zIndex: 110000, left: 0, top: 0, onShow: function () {
        }, onHide: function () {
        }, onClick: function (_49) {
        }
    };
})(jQuery);

